<?php

namespace App\Http\Controllers\Admin;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;
use DB;//引用数据库
use Crypt;//加密
require '../vendor/autoload.php';
use Intervention\Image\ImageManagerStatic as Image;


class UserController extends Controller
{
    //用户添加页面
    public function add(Request $request)
    {   $title = '用户添加';

        //会话跟踪
        $staff = $request->session()->get('staff');

        return view('admin.user.add',['title' => $title,'staff' => $staff]);
    }
    //insert这是用户执行添加
    public function insert(Request $request)
    {   //获取添加页面提交上来的数据,并去除了'_token'隐藏的数据
       $data = $request -> except('_token');
       //检测添加页面的数据并执行响应
       $this -> validate($request,[
            'username' => 'required|max:12|min:6',
            'password' => 'required|max:12|min:6',
            'repassword' => 'required|same:password',
            'email' => 'required|email',
            'phone' => 'required|regex:[1[0-9]{10}]|digits_between:11,11',

        ],[

            'username.required' => '用户名不能为空',
            'username.max' => '请输入6-12位的用户名',
            'username.min' => '请输入6-12位的用户名',
            'password.required' => '密码不能为空',
            'password.max' => '请输入6-12位的密码',
            'password.min' => '请输入6-12位的密码',
            'repassword.required' => '确认密码不能为空',
            'repassword.same' => '两次密码不一致,请重新输入',
            'email.required' => '邮箱地址不能为空',
            'email.email' => '请输入正确的email格式',
            'phone.required' => '手机号码不能为空',
            'phone.regex' => '请输入正确的手机号码',
            'phone.digits_between' => '请输入11位的有效手机号',
        ]);
       $data['atime'] = time();//添加用户注册事件;
       unset($data['repassword']);
       // dd($data);
       // dd($data);
       //执行数据添加操作
       //使用哈希加密密码
       $data['password'] = Crypt::encrypt($data['password']);
       // echo $data['password'];
       
       // 验证用户名是否已经存在
       $res = DB::table('bro_user') -> where('username',$data['username']) -> get();
       // dd($res);
       if(!empty($res))
       {
        return back() -> with('oldusername','用户名已存在');
       }
       //处理pic地址,存入数据库
       
       if($request -> hasFile('pic'))//判断是否有文件
       {
            if($request -> file('pic') -> isValid())//判断文件是否有效
            { 
                $arr = array('jpg','png','gif');
                //获取文件的后缀名
                $suffix = $request -> file('pic') -> getClientOriginalExtension();
                // echo $suffix;
                if(in_array($suffix,$arr))
                {
                  //制作文件名
                  $fileName = time().rand().'.'.$suffix;
                  //上传文件
                  $path = './uploads/user';//上传文件的目录

                  //执行上传
                  $request -> file('pic') -> move($path,$fileName);
                  //拼凑pic的URL地址
                  $data['pic'] = trim($path.'/'.$fileName,'.');
                  // return $data['pic'];
                  $fname = $path . '/' . $fileName;
                  $img = Image::make($fname)->resize(200,200)->save($fname);
                }else{
                  return back() -> with('error','上传文件不合法');
                }

            }

            //设置用户状态的值
            $data['status'] = 1;

            //将数据发送到数据库
            $res = DB::table('bro_user') -> insert($data);
       }
      

       //执行发送判断
       if($res)
       {
         return redirect('/admin/user/show') -> with('success','用户添加成功');
       }else{
         return back() -> with('error','用户添加失败');
       }

    }

    // 用户列表页的show方法
    public function show(Request $request)
    {
        $title = '用户列表';

        //会话跟踪
        $staff = $request->session()->get('staff');

        $data = DB::table('bro_user') ->where(function($query) use ($request){
            $query -> where('username','like','%'.$request -> input('keywords').'%');
        }) -> paginate($request -> input('num',10));

        //向用户列表发送数据
        return view('admin.user.show',['title' => $title,'data' => $data,'request' => $request -> all(),'staff' => $staff]);

    }

    //用户编辑页面方法
    public function edit(Request $request,$id)
    {
        $title= '用户编辑';

        //会话跟踪
        $staff = $request->session()->get('staff');

        //执行数据查询
        $data = DB::table('bro_user') -> where('id',$id) -> first();
        //解析模板
        return view('/admin/user/edit',['title'=>$title,'data'=>$data,'staff' => $staff]);
    }

    //用户修改的方法
    public function update(Request $request)
    {  
         //删除隐藏域
        $data = $request -> except('_token','oldpic');

        //检测添加页面的数据并执行响应
       $this -> validate($request,[
            'username' => 'required|max:12|min:6',
            'email' => 'required|email',
            'phone' => 'required|regex:[1[0-9]{10}]|digits_between:11,11',

        ],[

            'username.required' => '用户名不能为空',
            'username.max' => '请输入6-12位的用户名',
            'username.min' => '请输入6-12位的用户名',
            'email.required' => '邮箱地址不能为空',
            'email.email' => '请输入正确的email格式',
            'phone.required' => '手机号码不能为空',
            'phone.regex' => '请输入正确的手机号码',
            'phone.digits_between' => '请输入11位的有效手机号',
        ]);

        //处理pic地址,存入数据库
       
       if($request -> hasFile('pic'))//判断是否有文件
       {
            if($request -> file('pic') -> isValid())//判断文件是否有效
            { 
                $arr = array('jpg','png','gif');
                //获取文件的后缀名
                $suffix = $request -> file('pic') -> getClientOriginalExtension();
                // echo $suffix;
                if(in_array($suffix,$arr))
                {
                    //制作文件名
                  $fileName = time().rand().'.'.$suffix;
                  //上传文件
                  $path = './uploads/user';//上传文件的目录

                  //执行上传
                  $request -> file('pic') -> move($path,$fileName);
                  //拼凑pic的URL地址
                  $data['pic'] = trim($path.'/'.$fileName,'.');

                  //缩放图片
                  $fname = $path . '/' . $fileName;
                  $img = Image::make($fname)->resize(200,200)->save($fname);
                  // return $data['pic'];
                  // dd($request -> input('oldpic'));
                  //删除旧的头像,以免uploads爆满
                  $oldpath = '.'.$request -> input('oldpic');
                  // dd($oldpath);

                  
                  //默认头像
                  $oldpic = './uploads/user/1.jpg';
                  
                  if($oldpath != '.')
                  {
                      if(file_exists($oldpath))
                    {  
                      if($oldpath != $oldpic)
                      {
                        unlink($oldpath);
                      } 
                      
                    }
                  }                
                }else{
                  return back() -> with('error','上传文件不合法');
                }
                
            }
          // 发送修改语句
          $res = DB::table('bro_user') -> where('id',$data['id']) -> update($data);

       }


        //判断修改是否成功
        if($res)
        {
            return redirect('/admin/user/show') -> with('success','更新成功');
        }else{
            return back() -> with('error','更新失败');
        }
        
    }

    //用户删除方法
    public function delete($id)
    {   

        $pic = DB::table('bro_user')-> where('id',$id) -> first() -> pic;
        $oldpath = '.'.$pic;
        
        $path= './uploads/user/1.jpg';
        if($oldpath != '.')
        {
          if(file_exists($oldpath))
          {
             if($oldpath != $path)
            {
                unlink($oldpath);
            }
                  
          }
        }
        // dd($pic);
        $res = DB::table('bro_user')-> where('id',$id) -> delete();

        //判断删除是否成功
       if($res)
        {
            return redirect('/admin/user/show') -> with('success','删除成功');
        }else{
            return back() -> with('error','删除失败');
        }
    }

}
